﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Colaboradores.Models;
using Colaboradores.Persistencia;

namespace Colaboradores.Controllers
{
    public class DeptoController : Controller
    {
        /// <summary>
        /// View principal dos departamentos. Disponibiliza a Lista e dá opções de Cadastrar e pesquisar, alterar e excluir
        /// </summary>
        /// <returns></returns>
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Index()
        {
            Cls_ListaDepto ListaDepto = new Cls_ListaDepto(Persistencia_Depto.Listar());
            return View(ListaDepto);
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(String Tipo, String Pesquisa = "")
        {
            IList<Cls_Depto> lstDepto;
            if (Pesquisa != "")
            {
                if (Tipo == "Cod")
                {
                    lstDepto = new List<Cls_Depto>();
                    try
                    {
                        Cls_Depto depto;
                        depto = Persistencia_Depto.ConsultarPorCodigo(int.Parse(Pesquisa));
                        if (depto != null)
                        {
                            lstDepto.Add(depto);
                        }
                        ViewData["Pesquisa"] = "Código: " + Pesquisa;
                    }
                    catch(Exception)
                    {
                        ViewData["Pesquisa"] = "Pesquisa de Código Inválida: " + Pesquisa;
                    }
                }
                else
                {
                    lstDepto = Persistencia_Depto.ConsultarPorDescricao(Pesquisa);
                    ViewData["Pesquisa"] = "Descrição: " + Pesquisa;
                }
            }
            else
            {
                lstDepto = Persistencia_Depto.Listar();
            }

            Cls_ListaDepto listaDepto = new Cls_ListaDepto(lstDepto);
            return View(listaDepto);
        }

        [AcceptVerbs(HttpVerbs.Get)]
        public ViewResult Novo()
        {
            return View();
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ViewResult Novo(Cls_Depto depto)
        {
            if (depto.Dsc == null) {
                ModelState.AddModelError("Dsc", "Descrição deve estar preenchida!");
            }

            if (!ModelState.IsValid)
            {
                return View("Novo", depto);
            }

            try
            {
                Persistencia_Depto.Inserir(depto);
            }
            catch (DepartamentoExistenteException)
            {
                ViewData["Mensagem"] = "Departamento já existe. Inclusão não efetuada!";
                return View("Sucesso", depto);
            }

            ViewData["Mensagem"] = "Cadastrado com Sucesso!";
            return View("Sucesso", depto);
        }

        [AcceptVerbs(HttpVerbs.Get)]
        public ViewResult Alterar(int Cod = 0, String Dsc = "")
        {
            Cls_Depto depto = new Cls_Depto(Cod, Dsc);
            return View(depto);
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ViewResult Alterar(Cls_Depto depto)
        {
            if (depto.Dsc == null)
            {
                ModelState.AddModelError("Dsc", "Descrição deve estar preenchida!");
            }

            if (!ModelState.IsValid)
            {
                return View("Alterar", depto);
            }

            try
            {
                Persistencia_Depto.Alterar(depto);
            }
            catch(DepartamentoNaoExistenteException)
            {
                ViewData["Mensagem"] = "Departamento não existe. Alteração não Efetuada!";
                return View("Sucesso", depto);
            }

            ViewData["Mensagem"] = "Alterado com Sucesso!";
            return View("Sucesso", depto);
        }

        public ViewResult Excluir(int Cod = 0, String Dsc = "")
        {
            Cls_Depto depto = Persistencia_Depto.ConsultarPorCodigo(Cod);
            if (depto != null)
            {
                Persistencia_Depto.Excluir(depto);
                ViewData["Mensagem"] = "Excluído com Sucesso!";
            }
            else
            {
                depto = new Cls_Depto(Cod, Dsc);
                ViewData["Mensagem"] = "Departamento não encontrado. Exclusão não efetuada!";
            }

            return View("Sucesso", depto);
        }
    }
}